package com.ddxz.middleground.master.util;

import com.ddxz.tool.web.common.ConstData;
import com.ddxz.tool.web.dto.DdxzException;

import static com.ddxz.middleground.master.util.ErrorStatus.INVALID_GENDER;
import static com.ddxz.middleground.master.util.ErrorStatus.INVALID_STATUS;

/**
 * class description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/7/29
 */

public interface MasterData extends ConstData {
    //region 表名常量
    /**
     * 用户表名称
     */
    String T_USER = "ddxz_user";

    /**
     * 部门表名称
     */
    String T_DEPARTMENT = "ddxz_department";

    /**
     * 角色表名称
     */
    String T_ROLE = "ddxz_role";

    /**
     * 应用信息表名称
     */
    String T_APPLICATION = "ddxz_app";

    /**
     * 应用菜单信息表
     */
    String T_MENU = "ddxz_menu";

    /**
     * 默认密码
     */
    String DEFAULT_PASSWORD = "Ddxz@123";
    //endregion

    //region 移动边界常量
    /**
     * 树形结构根节点的父节点类型统一为-1
     */
    String TOP_NODE_PARENT_ID = "-1";

    /**
     * 无法上移的顺序号
     */
    int CANNOT_UP_ORDER = 1;

    /**
     * 无法降级的最小顺序号
     */
    int MIN_DECREASE_ORDER = 2;
    // endregion

    //region 菜单类型常量
    /**
     * 菜单
     */
    int MENU = 1;
    /**
     * 标签
     */
    int TAB = 2;
    /**
     * 操作
     */
    int OPER = 3;
    //endregion

    //region 状态常量
    /**
     * 启用状态
     */
    int USING = 1;

    /**
     * 禁用状态
     */
    int FORBIDDEN = 2;
    //endregion

    //region 性别常量
    /**
     * 男
     */
    int MALE = 1;

    /**
     * 女
     */
    int FEMALE = 2;
    //endregion

    //region 强制修改密码常量
    /**
     * 首次登陆，需要修改密码
     */
    int FIRST = 1;

    /**
     * 正常登陆
     */
    int NORMAL = 2;
    // endregion

    //region 移动方向常量
    /**
     * 向上移动
     */
    int UP = 1;

    /**
     * 向下移动
     */
    int DOWN = 2;

    /**
     * 升级移动
     */
    int INCREASE = 3;

    /**
     * 降级移动
     */
    int DECREASE = 4;
    //endregion

    //region 学历
    /**
     * 最底学历 小学
     */
    int BOTTOM_EDU = 1;
    /**
     * 最高学历，博士
     */
    int TOP_EDU = 8;
    //endregion

    //region 缺省方法

    /**
     * 校验用户指定的状态是否正确
     *
     * @param status 状态值
     */
    default void checkStatus(int status) {
        if (status != USING && status != FORBIDDEN) {
            throw new DdxzException(INVALID_STATUS);
        }
    }

    /**
     * 校验用户的性别信息是否正确
     *
     * @param gender 性别
     */
    default void checkGender(int gender) {
        if (gender != MALE && gender != FEMALE) {
            throw new DdxzException(INVALID_GENDER);
        }
    }
    //endregion
}
